package com.cougil.uoc.seghismed.model.ciphed;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Lob;
import javax.persistence.Table;
import javax.persistence.Transient;
import javax.persistence.UniqueConstraint;

import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;

/**
 * Entitat de negoci que representa pròpiament una Visita d'un Pacient amb la seva informació xifrada
 * @author Ignacio Cougil Jares
 */

@Entity
@Table(
        name="VISITA_CIPHED",
        uniqueConstraints= 
            @UniqueConstraint(columnNames={"IDCIPHED"})
)
public class VisitaCiphed {

	@Id
	@GeneratedValue
	private Integer id;
	@Lob
	private byte[] idCiphed;
	@Transient
	private byte[] dataHoraCiphed;
	@Transient
	private byte[] temaCiphed;
	@Transient
	private byte[] anamnesiCiphed;
	@Transient
	private byte[] diagnosiCiphed;
	@Transient
	private byte[] tractamentCiphed;
	@Transient
	private byte[] dataAltaCiphed;
	@Transient
	private byte[] dataModificacioCiphed;

	@Transient
	private MetgeCiphed metgeCiphed;

	/**
	 * @return Retorna el valor de la propietat id
	 */
	public Integer getId() {
		return id;
	}

	/**
	 * @param Estableix id com a valor de la propietat id
	 */
	public void setId(Integer id) {
		this.id = id;
	}

	/**
	 * @return Retorna el valor de la propietat idCiphed
	 */
	public byte[] getIdCiphed() {
		return idCiphed;
	}

	/**
	 * @param Estableix idCiphed com a valor de la propietat idCiphed
	 */
	public void setIdCiphed(byte[] idCiphed) {
		this.idCiphed = idCiphed;
	}

	/**
	 * @return Retorna el valor de la propietat dataHoraCiphed
	 */
	public byte[] getDataHoraCiphed() {
		return dataHoraCiphed;
	}

	/**
	 * @param Estableix dataHoraCiphed com a valor de la propietat dataHoraCiphed
	 */
	public void setDataHoraCiphed(byte[] dataHora) {
		this.dataHoraCiphed = dataHora;
	}

	/**
	 * @return Retorna el valor de la propietat temaCiphed
	 */
	public byte[] getTemaCiphed() {
		return temaCiphed;
	}

	/**
	 * @param Estableix temaCiphed com a valor de la propietat temaCiphed
	 */
	public void setTemaCiphed(byte[] tema) {
		this.temaCiphed = tema;
	}

	/**
	 * @return Retorna el valor de la propietat anamnesiCiphed
	 */
	public byte[] getAnamnesiCiphed() {
		return anamnesiCiphed;
	}

	/**
	 * @param Estableix anamnesiCiphed com a valor de la propietat anamnesiCiphed
	 */
	public void setAnamnesiCiphed(byte[] anamnesi) {
		this.anamnesiCiphed = anamnesi;
	}

	/**
	 * @return Retorna el valor de la propietat diagnosiCiphed
	 */
	public byte[] getDiagnosiCiphed() {
		return diagnosiCiphed;
	}

	/**
	 * @param Estableix diagnosiCiphed com a valor de la propietat diagnosiCiphed
	 */
	public void setDiagnosiCiphed(byte[] diagnosi) {
		this.diagnosiCiphed = diagnosi;
	}

	/**
	 * @return Retorna el valor de la propietat tractamentCiphed
	 */
	public byte[] getTractamentCiphed() {
		return tractamentCiphed;
	}

	/**
	 * @param Estableix tractamentCiphed com a valor de la propietat tractamentCiphed
	 */
	public void setTractamentCiphed(byte[] tractament) {
		this.tractamentCiphed = tractament;
	}

	/**
	 * @return Retorna el valor de la propietat dataAltaCiphed
	 */
	public byte[] getDataAltaCiphed() {
		return dataAltaCiphed;
	}

	/**
	 * @param Estableix dataAltaCiphed com a valor de la propietat dataAltaCiphed
	 */
	public void setDataAltaCiphed(byte[] dataAlta) {
		this.dataAltaCiphed = dataAlta;
	}

	/**
	 * @return Retorna el valor de la propietat dataModificacioCiphed
	 */
	public byte[] getDataModificacioCiphed() {
		return dataModificacioCiphed;
	}

	/**
	 * @param Estableix dataModificacioCiphed com a valor de la propietat dataModificacioCiphed
	 */
	public void setDataModificacioCiphed(byte[] dataModificacio) {
		this.dataModificacioCiphed = dataModificacio;
	}

	/**
	 * @return Retorna el valor de la propietat metgeCiphed
	 */
	public MetgeCiphed getMetgeCiphed() {
		return metgeCiphed;
	}

	/**
	 * @param Estableix metgeCiphed com a valor de la propietat metgeCiphed
	 */
	public void setMetgeCiphed(MetgeCiphed metge) {
		this.metgeCiphed = metge;
	}

	/* (non-Javadoc)
	 * @see java.lang.Object#toString()
	 */
	@Override
	public String toString() {
		return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
				.append("id", id)
				.append("idCiphed", idCiphed)
				.append("dataHoraCiphed", dataHoraCiphed)
				.append("temaCiphed", temaCiphed)
				.append("anamnesiCiphed", anamnesiCiphed)
				.append("diagnosiCiphed", diagnosiCiphed)
				.append("tractamentCiphed", tractamentCiphed)
				.append("dataAltaCiphed", dataAltaCiphed)
				.append("dataModificacioCiphed", dataModificacioCiphed)
				.append("metgeCiphed", metgeCiphed)
				.toString();
	}
	
	/* (non-Javadoc)
	 * @see java.lang.Object#equals(java.lang.Object)
	 */
	@Override
	public boolean equals(final Object other) {
		if (!(other instanceof VisitaCiphed))
			return false;
		VisitaCiphed castOther = (VisitaCiphed) other;
		return new EqualsBuilder().append(idCiphed, castOther.idCiphed)
				.isEquals();
	}

	/* (non-Javadoc)
	 * @see java.lang.Object#hashCode()
	 */
	@Override
	public int hashCode() {
		return new HashCodeBuilder().append(idCiphed).toHashCode();
	}

	

	
	
}
